import os

def print_directory_structure(startpath):
    for root, dirs, files in os.walk(startpath):
        level = root.replace(startpath, '').count(os.sep)
        indent = ' ' * 4 * (level)
        print(f"{indent}{os.path.basename(root)}/")
        sub_indent = ' ' * 4 * (level + 1)
        for f in files:
            print(f"{sub_indent}{f}")
        for d in dirs:
            print(f"{sub_indent}{d}/")

def build_directory_tree(path, level=0):
    """
    递归构建目录树的字典表示。
    
    :param path: 当前处理的路径（字符串）
    :param level: 当前目录的深度级别
    :return: 代表目录树的字典
    """
    indent = ' ' * 4 * level  # 这里计算缩进，但实际构建数据结构时不需要它
    tree = {'name': os.path.basename(path), 'children': []}
    
    if os.path.isdir(path):  # 检查是否为目录
        for item in os.listdir(path):
            full_path = os.path.join(path, item)
            if os.path.isdir(full_path):
                # 如果是目录，则递归调用自己
                tree['children'].append(build_directory_tree(full_path, level + 1))
            else:
                # 如果是文件，则直接添加文件名到当前层级的children
                tree['children'].append({'name': item, 'type': 'file'})
    return tree

# 使用方法：提供你想要扫描的文件夹路径
# 当前目录作为示例，默认可以更改为其他路径，如 'C:/Users/YourName/Documents'
start_path = 'H:/Projects/我的工具库/vue-vben-admin/src'  
# print_directory_structure(start_path)

root_path = 'H:/Projects/我的工具库/vue-vben-admin/src'  # 假设你想从当前工作目录开始构建目录树
directory_tree = build_directory_tree(root_path)
print(directory_tree)
